home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 October: Mac OS SDK / Dev.CD Oct 00 SDK1.toast / Development Kits / Mac OS / Security SDK / Includes / Keychain.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-10-28  |  24.7 KB  |  749 lines  |  [TEXT/CWIE]

  1. /*
  2.      File:        Keychain.h
  3.  
  4.      Contains:    Apple Keychain Manager interfaces.
  5.  
  6.      Version:    2.0
  7.  
  8.      Copyright:    © 1998-1999 by Apple Computer, Inc., all rights reserved
  9.  
  10.      Bugs?:        Please include the the file and version information (from above) with
  11.                  the problem description.  Developers belonging to one of the Apple
  12.                  developer programs can submit bug reports to:
  13.  
  14.                      devsupport@apple.com
  15.  
  16. */
  17. /* Data structures and types */
  18. #ifndef __KEYCHAIN__
  19. #define __KEYCHAIN__
  20.  
  21. #ifndef __MACTYPES__
  22. #include <MacTypes.h>
  23. #endif
  24.  
  25. #ifndef __FILES__
  26. #include <Files.h>
  27. #endif
  28.  
  29. #ifndef __PROCESSES__
  30. #include <Processes.h>
  31. #endif
  32.  
  33. #ifndef __ALIASES__
  34. #include <Aliases.h>
  35. #endif
  36.  
  37. #ifndef __CODEFRAGMENTS__
  38. #include <CodeFragments.h>
  39. #endif
  40.  
  41. #ifndef __ERRORS__
  42. #include <Errors.h>
  43. #endif
  44.  
  45. #ifndef __DATETIMEUTILS__
  46. #include <DateTimeUtils.h>
  47. #endif
  48.  
  49. #ifndef __COREFOUNDATION_CFSTRING__
  50. #if TARGET_OS_MAC && SLASH_INCLUDES_UNSUPPORTED
  51.     #include <:CoreFoundation:CFString.h>
  52. #else
  53.     #include <CoreFoundation/CFString.h>
  54. #endif
  55. #endif
  56.  
  57. #ifndef __COREFOUNDATION_CFARRAY__
  58. #if TARGET_OS_MAC && SLASH_INCLUDES_UNSUPPORTED
  59.     #include <:CoreFoundation:CFArray.h>
  60. #else
  61.     #include <CoreFoundation/CFArray.h>
  62. #endif
  63. #endif
  64.  
  65. #ifndef __COREFOUNDATION_CFDATE__
  66. #if TARGET_OS_MAC && SLASH_INCLUDES_UNSUPPORTED
  67.     #include <:CoreFoundation:CFDate.h>
  68. #else
  69.     #include <CoreFoundation/CFDate.h>
  70. #endif
  71. #endif
  72.  
  73.  
  74.  
  75.  
  76. #if PRAGMA_ONCE
  77. #pragma once
  78. #endif
  79.  
  80. #ifdef __cplusplus
  81. extern "C" {
  82. #endif
  83.  
  84. #if PRAGMA_IMPORT
  85. #pragma import on
  86. #endif
  87.  
  88. #if PRAGMA_STRUCT_ALIGN
  89.     #pragma options align=mac68k
  90. #elif PRAGMA_STRUCT_PACKPUSH
  91.     #pragma pack(push, 2)
  92. #elif PRAGMA_STRUCT_PACK
  93.     #pragma pack(2)
  94. #endif
  95.  
  96. typedef struct OpaqueKCRef*             KCRef;
  97. typedef struct OpaqueKCItemRef*         KCItemRef;
  98. typedef struct OpaqueKCSearchRef*         KCSearchRef;
  99. typedef CFDataRef                         SecOIDRef;
  100. enum {
  101.     kIdleKCEvent                = 0,                            /* null event */
  102.     kLockKCEvent                = 1,                            /* a keychain was locked */
  103.     kUnlockKCEvent                = 2,                            /* a keychain was unlocked */
  104.     kAddKCEvent                    = 3,                            /* an item was added to a keychain */
  105.     kDeleteKCEvent                = 4,                            /* an item was deleted from a keychain */
  106.     kUpdateKCEvent                = 5,                            /* an item was updated */
  107.     kChangeIdentityKCEvent        = 6,                            /* the keychain identity was changed */
  108.     kFindKCEvent                = 7,                            /* an item was found */
  109.     kSystemKCEvent                = 8,                            /* the keychain client can process events */
  110.     kDefaultChangedKCEvent        = 9,                            /* the default keychain was changed */
  111.     kDataAccessKCEvent            = 10                            /* a process has accessed a keychain item's data */
  112. };
  113.  
  114. typedef UInt16                             KCEvent;
  115. enum {
  116.     kIdleKCEventMask            = 1 << kIdleKCEvent,
  117.     kLockKCEventMask            = 1 << kLockKCEvent,
  118.     kUnlockKCEventMask            = 1 << kUnlockKCEvent,
  119.     kAddKCEventMask                = 1 << kAddKCEvent,
  120.     kDeleteKCEventMask            = 1 << kDeleteKCEvent,
  121.     kUpdateKCEventMask            = 1 << kUpdateKCEvent,
  122.     kChangeIdentityKCEventMask    = 1 << kChangeIdentityKCEvent,
  123.     kFindKCEventMask            = 1 << kFindKCEvent,
  124.     kSystemEventKCEventMask        = 1 << kSystemKCEvent,
  125.     kDefaultChangedKCEventMask    = 1 << kDefaultChangedKCEvent,
  126.     kDataAccessKCEventMask        = 1 << kDataAccessKCEvent,
  127.     kEveryKCEventMask            = 0xFFFF                        /* all of the above*/
  128. };
  129.  
  130. typedef UInt16                             KCEventMask;
  131. typedef UInt8                             AFPServerSignature[16];
  132. typedef UInt8                             KCPublicKeyHash[20];
  133. typedef OSType                             KCAttrType;
  134.  
  135. struct KCCallbackInfo {
  136.     UInt32                             version;
  137.     KCItemRef                         item;
  138.     ProcessSerialNumber             processID;
  139.     EventRecord                     event;
  140.     KCRef                             keychain;
  141. };
  142. typedef struct KCCallbackInfo            KCCallbackInfo;
  143. enum {
  144.     kUnlockStateKCStatus        = 1,
  145.     kRdPermKCStatus                = 2,
  146.     kWrPermKCStatus                = 4
  147. };
  148.  
  149.  
  150. typedef UInt32                             KCStatus;
  151. enum {
  152.     kCertificateKCItemClass        = FOUR_CHAR_CODE('cert'),        /* Certificate */
  153.     kAppleSharePasswordKCItemClass = FOUR_CHAR_CODE('ashp'),    /* Appleshare password */
  154.     kInternetPasswordKCItemClass = FOUR_CHAR_CODE('inet'),        /* Internet password */
  155.     kGenericPasswordKCItemClass    = FOUR_CHAR_CODE('genp')        /* Generic password */
  156. };
  157.  
  158. typedef FourCharCode                     KCItemClass;
  159. enum {
  160.                                                                 /* Common attributes */
  161.     kClassKCItemAttr            = FOUR_CHAR_CODE('clas'),        /* Item class (KCItemClass) */
  162.     kCreationDateKCItemAttr        = FOUR_CHAR_CODE('cdat'),        /* Date the item was created (UInt32) */
  163.     kModDateKCItemAttr            = FOUR_CHAR_CODE('mdat'),        /* Last time the item was updated (UInt32) */
  164.     kDescriptionKCItemAttr        = FOUR_CHAR_CODE('desc'),        /* User-visible description string (string) */
  165.     kCommentKCItemAttr            = FOUR_CHAR_CODE('icmt'),        /* User's comment about the item (string) */
  166.     kCreatorKCItemAttr            = FOUR_CHAR_CODE('crtr'),        /* Item's creator (OSType) */
  167.     kTypeKCItemAttr                = FOUR_CHAR_CODE('type'),        /* Item's type (OSType) */
  168.     kScriptCodeKCItemAttr        = FOUR_CHAR_CODE('scrp'),        /* Script code for all strings (ScriptCode) */
  169.     kLabelKCItemAttr            = FOUR_CHAR_CODE('labl'),        /* Item label (string) */
  170.     kInvisibleKCItemAttr        = FOUR_CHAR_CODE('invi'),        /* Invisible (boolean) */
  171.     kNegativeKCItemAttr            = FOUR_CHAR_CODE('nega'),        /* Negative (boolean) */
  172.     kCustomIconKCItemAttr        = FOUR_CHAR_CODE('cusi'),        /* Custom icon (boolean) */
  173.                                                                 /* Unique Generic password attributes */
  174.     kAccountKCItemAttr            = FOUR_CHAR_CODE('acct'),        /* User account (Str63) - also applies to Appleshare and Generic */
  175.     kServiceKCItemAttr            = FOUR_CHAR_CODE('svce'),        /* Service (Str63) */
  176.     kGenericKCItemAttr            = FOUR_CHAR_CODE('gena'),        /* User-defined attribute (untyped bytes) */
  177.                                                                 /* Unique Internet password attributes */
  178.     kSecurityDomainKCItemAttr    = FOUR_CHAR_CODE('sdmn'),        /* Security domain (Str63) */
  179.     kServerKCItemAttr            = FOUR_CHAR_CODE('srvr'),        /* Server's domain name or IP address (string) */
  180.     kAuthTypeKCItemAttr            = FOUR_CHAR_CODE('atyp'),        /* Authentication Type (KCAuthType) */
  181.     kPortKCItemAttr                = FOUR_CHAR_CODE('port'),        /* Port (UInt16) */
  182.     kPathKCItemAttr                = FOUR_CHAR_CODE('path'),        /* Path (Str255) */
  183.                                                                 /* Unique Appleshare password attributes */
  184.     kVolumeKCItemAttr            = FOUR_CHAR_CODE('vlme'),        /* Volume (Str63) */
  185.     kAddressKCItemAttr            = FOUR_CHAR_CODE('addr'),        /* Server address (IP or domain name) or zone name (string) */
  186.     kSignatureKCItemAttr        = FOUR_CHAR_CODE('ssig'),        /* Server signature block (AFPServerSignature) */
  187.                                                                 /* Unique AppleShare and Internet attributes */
  188.     kProtocolKCItemAttr            = FOUR_CHAR_CODE('ptcl'),        /* Protocol (KCProtocolType) */
  189.                                                                 /* Certificate attributes */
  190.     kSubjectKCItemAttr            = FOUR_CHAR_CODE('subj'),        /* Subject distinguished name (DER-encoded data) */
  191.     kCommonNameKCItemAttr        = FOUR_CHAR_CODE('cn  '),        /* Common Name (UTF8-encoded string) */
  192.     kIssuerKCItemAttr            = FOUR_CHAR_CODE('issu'),        /* Issuer distinguished name (DER-encoded data) */
  193.     kSerialNumberKCItemAttr        = FOUR_CHAR_CODE('snbr'),        /* Certificate serial number (DER-encoded data) */
  194.     kEMailKCItemAttr            = FOUR_CHAR_CODE('mail'),        /* E-mail address (ASCII-encoded string) */
  195.     kPublicKeyHashKCItemAttr    = FOUR_CHAR_CODE('hpky'),        /* Hash of public key (KCPublicKeyHash), 20 bytes max. */
  196.     kIssuerURLKCItemAttr        = FOUR_CHAR_CODE('iurl'),        /* URL of the certificate issuer (ASCII-encoded string) */
  197.                                                                 /* Shared by keys and certificates */
  198.     kEncryptKCItemAttr            = FOUR_CHAR_CODE('encr'),        /* Encrypt (Boolean) */
  199.     kDecryptKCItemAttr            = FOUR_CHAR_CODE('decr'),        /* Decrypt (Boolean) */
  200.     kSignKCItemAttr                = FOUR_CHAR_CODE('sign'),        /* Sign (Boolean) */
  201.     kVerifyKCItemAttr            = FOUR_CHAR_CODE('veri'),        /* Verify (Boolean) */
  202.     kWrapKCItemAttr                = FOUR_CHAR_CODE('wrap'),        /* Wrap (Boolean) */
  203.     kUnwrapKCItemAttr            = FOUR_CHAR_CODE('unwr'),        /* Unwrap (Boolean) */
  204.     kStartDateKCItemAttr        = FOUR_CHAR_CODE('sdat'),        /* Start Date (UInt32) */
  205.     kEndDateKCItemAttr            = FOUR_CHAR_CODE('edat')        /* End Date (UInt32) */
  206. };
  207.  
  208. typedef FourCharCode                     KCItemAttr;
  209.  
  210. struct KCAttribute {
  211.     KCAttrType                         tag;                        /* 4-byte attribute tag */
  212.     UInt32                             length;                        /* Length of attribute data */
  213.     void *                            data;                        /* Pointer to attribute data */
  214. };
  215. typedef struct KCAttribute                KCAttribute;
  216. typedef KCAttribute *                    KCAttributePtr;
  217.  
  218. struct KCAttributeList {
  219.     UInt32                             count;                        /* How many attributes in the array */
  220.     KCAttribute *                    attr;                        /* Pointer to first attribute in array */
  221. };
  222. typedef struct KCAttributeList            KCAttributeList;
  223. enum {
  224.     kKCAuthTypeNTLM                = FOUR_CHAR_CODE('ntlm'),
  225.     kKCAuthTypeMSN                = FOUR_CHAR_CODE('msna'),
  226.     kKCAuthTypeDPA                = FOUR_CHAR_CODE('dpaa'),
  227.     kKCAuthTypeRPA                = FOUR_CHAR_CODE('rpaa'),
  228.     kKCAuthTypeHTTPDigest        = FOUR_CHAR_CODE('httd'),
  229.     kKCAuthTypeDefault            = FOUR_CHAR_CODE('dflt')
  230. };
  231.  
  232.  
  233. typedef FourCharCode                     KCAuthType;
  234. enum {
  235.     kKCProtocolTypeFTP            = FOUR_CHAR_CODE('ftp '),
  236.     kKCProtocolTypeFTPAccount    = FOUR_CHAR_CODE('ftpa'),
  237.     kKCProtocolTypeHTTP            = FOUR_CHAR_CODE('http'),
  238.     kKCProtocolTypeIRC            = FOUR_CHAR_CODE('irc '),
  239.     kKCProtocolTypeNNTP            = FOUR_CHAR_CODE('nntp'),
  240.     kKCProtocolTypePOP3            = FOUR_CHAR_CODE('pop3'),
  241.     kKCProtocolTypeSMTP            = FOUR_CHAR_CODE('smtp'),
  242.     kKCProtocolTypeSOCKS        = FOUR_CHAR_CODE('sox '),
  243.     kKCProtocolTypeIMAP            = FOUR_CHAR_CODE('imap'),
  244.     kKCProtocolTypeLDAP            = FOUR_CHAR_CODE('ldap'),
  245.     kKCProtocolTypeAppleTalk    = FOUR_CHAR_CODE('atlk'),
  246.     kKCProtocolTypeAFP            = FOUR_CHAR_CODE('afp '),
  247.     kKCProtocolTypeTelnet        = FOUR_CHAR_CODE('teln')
  248. };
  249.  
  250. typedef FourCharCode                     KCProtocolType;
  251. enum {
  252.     kSecOptionReserved            = 0x000000FF,                    /* First byte reserved for SecOptions flags */
  253.     kCertUsageShift                = 8,                            /* start at bit 8 */
  254.     kCertUsageSigningAdd        = 1 << (kCertUsageShift + 0),
  255.     kCertUsageSigningAskAndAdd    = 1 << (kCertUsageShift + 1),
  256.     kCertUsageVerifyAdd            = 1 << (kCertUsageShift + 2),
  257.     kCertUsageVerifyAskAndAdd    = 1 << (kCertUsageShift + 3),
  258.     kCertUsageEncryptAdd        = 1 << (kCertUsageShift + 4),
  259.     kCertUsageEncryptAskAndAdd    = 1 << (kCertUsageShift + 5),
  260.     kCertUsageDecryptAdd        = 1 << (kCertUsageShift + 6),
  261.     kCertUsageDecryptAskAndAdd    = 1 << (kCertUsageShift + 7),
  262.     kCertUsageKeyExchAdd        = 1 << (kCertUsageShift + 8),
  263.     kCertUsageKeyExchAskAndAdd    = 1 << (kCertUsageShift + 9),
  264.     kCertUsageRootAdd            = 1 << (kCertUsageShift + 10),
  265.     kCertUsageRootAskAndAdd        = 1 << (kCertUsageShift + 11),
  266.     kCertUsageSSLAdd            = 1 << (kCertUsageShift + 12),
  267.     kCertUsageSSLAskAndAdd        = 1 << (kCertUsageShift + 13),
  268.     kCertUsageAllAdd            = 0x7FFFFF00
  269. };
  270.  
  271. typedef UInt32                             KCCertAddOptions;
  272. enum {
  273.     kPolicyKCStopOn                = 0,
  274.     kNoneKCStopOn                = 1,
  275.     kFirstPassKCStopOn            = 2,
  276.     kFirstFailKCStopOn            = 3
  277. };
  278.  
  279. typedef UInt16                             KCVerifyStopOn;
  280. enum {
  281.     kCertSearchShift            = 0,                            /* start at bit 0 */
  282.     kCertSearchSigningIgnored    = 0,
  283.     kCertSearchSigningAllowed    = 1 << (kCertSearchShift + 0),
  284.     kCertSearchSigningDisallowed = 1 << (kCertSearchShift + 1),
  285.     kCertSearchSigningMask        = ((kCertSearchSigningAllowed) | (kCertSearchSigningDisallowed)),
  286.     kCertSearchVerifyIgnored    = 0,
  287.     kCertSearchVerifyAllowed    = 1 << (kCertSearchShift + 2),
  288.     kCertSearchVerifyDisallowed    = 1 << (kCertSearchShift + 3),
  289.     kCertSearchVerifyMask        = ((kCertSearchVerifyAllowed) | (kCertSearchVerifyDisallowed)),
  290.     kCertSearchEncryptIgnored    = 0,
  291.     kCertSearchEncryptAllowed    = 1 << (kCertSearchShift + 4),
  292.     kCertSearchEncryptDisallowed = 1 << (kCertSearchShift + 5),
  293.     kCertSearchEncryptMask        = ((kCertSearchEncryptAllowed) | (kCertSearchEncryptDisallowed)),
  294.     kCertSearchDecryptIgnored    = 0,
  295.     kCertSearchDecryptAllowed    = 1 << (kCertSearchShift + 6),
  296.     kCertSearchDecryptDisallowed = 1 << (kCertSearchShift + 7),
  297.     kCertSearchDecryptMask        = ((kCertSearchDecryptAllowed) | (kCertSearchDecryptDisallowed)),
  298.     kCertSearchWrapIgnored        = 0,
  299.     kCertSearchWrapAllowed        = 1 << (kCertSearchShift + 8),
  300.     kCertSearchWrapDisallowed    = 1 << (kCertSearchShift + 9),
  301.     kCertSearchWrapMask            = ((kCertSearchWrapAllowed) | (kCertSearchWrapDisallowed)),
  302.     kCertSearchUnwrapIgnored    = 0,
  303.     kCertSearchUnwrapAllowed    = 1 << (kCertSearchShift + 10),
  304.     kCertSearchUnwrapDisallowed    = 1 << (kCertSearchShift + 11),
  305.     kCertSearchUnwrapMask        = ((kCertSearchUnwrapAllowed) | (kCertSearchUnwrapDisallowed)),
  306.     kCertSearchPrivKeyRequired    = 1 << (kCertSearchShift + 12),
  307.     kCertSearchAny                = 0
  308. };
  309.  
  310. typedef UInt32                             KCCertSearchOptions;
  311. /* Other constants */
  312. #ifdef __cplusplus
  313. const UInt16    kAnyPort        = 0;
  314. const OSType    kAnyProtocol    = ((OSType) 0L);
  315. const OSType    kAnyAuthType    = ((OSType) 0L);
  316. #else
  317. #define kAnyPort        0
  318. #define kAnyProtocol    ((OSType) 0L)
  319. #define kAnyAuthType    ((OSType) 0L)
  320. #endif
  321. /* Opening and getting information about the Keychain Manager */
  322. EXTERN_API( OSStatus )
  323. KCGetKeychainManagerVersion        (UInt32 *                returnVers);
  324.  
  325. #if TARGET_RT_MAC_CFM
  326. #ifdef __cplusplus
  327.     inline pascal Boolean KeychainManagerAvailable() { return ((KCGetKeychainManagerVersion != (void*)kUnresolvedCFragSymbolAddress) && (KCGetKeychainManagerVersion(nil) != cfragNoSymbolErr)); }
  328. #else
  329.     #define KeychainManagerAvailable()     ((KCGetKeychainManagerVersion != (void*)kUnresolvedCFragSymbolAddress) && (KCGetKeychainManagerVersion(nil) != cfragNoSymbolErr))
  330. #endif
  331. #else
  332. EXTERN_API( Boolean )
  333. KeychainManagerAvailable        (void);
  334.  
  335. #endif  /* TARGET_RT_MAC_CFM */
  336.  
  337. /* Creating references to keychains */
  338. EXTERN_API( OSStatus )
  339. KCMakeKCRefFromFSSpec            (FSSpec *                keychainFSSpec,
  340.                                  KCRef *                keychain);
  341.  
  342. EXTERN_API( OSStatus )
  343. KCMakeKCRefFromAlias            (AliasHandle             keychainAlias,
  344.                                  KCRef *                keychain);
  345.  
  346. EXTERN_API( OSStatus )
  347. KCMakeAliasFromKCRef            (KCRef                     keychain,
  348.                                  AliasHandle *            keychainAlias);
  349.  
  350. EXTERN_API( OSStatus )
  351. KCReleaseKeychain                (KCRef *                keychain);
  352.  
  353. /* Locking and unlocking a keychain */
  354. EXTERN_API( OSStatus )
  355. KCUnlock                        (KCRef                     keychain,
  356.                                  StringPtr                 password);
  357.  
  358. EXTERN_API( OSStatus )
  359. KCLock                            (KCRef                     keychain);
  360.  
  361. /* Specifying the default keychain */
  362. EXTERN_API( OSStatus )
  363. KCGetDefaultKeychain            (KCRef *                keychain);
  364.  
  365. EXTERN_API( OSStatus )
  366. KCSetDefaultKeychain            (KCRef                     keychain);
  367.  
  368. /* Creating a new keychain */
  369. EXTERN_API( OSStatus )
  370. KCCreateKeychain                (StringPtr                 password,
  371.                                  KCRef *                keychain);
  372.  
  373. /* Getting information about a keychain */
  374. EXTERN_API( OSStatus )
  375. KCGetStatus                        (KCRef                     keychain,
  376.                                  UInt32 *                keychainStatus);
  377.  
  378. EXTERN_API( OSStatus )
  379. KCGetKeychain                    (KCItemRef                 item,
  380.                                  KCRef *                keychain);
  381.  
  382. EXTERN_API( OSStatus )
  383. KCGetKeychainName                (KCRef                     keychain,
  384.                                  StringPtr                 keychainName);
  385.  
  386. EXTERN_API( OSStatus )
  387. KCChangeSettings                (KCRef                     keychain);
  388.  
  389. /* Enumerating available keychains */
  390. EXTERN_API( UInt16 )
  391. KCCountKeychains                (void);
  392.  
  393. EXTERN_API( OSStatus )
  394. KCGetIndKeychain                (UInt16                 index,
  395.                                  KCRef *                keychain);
  396.  
  397. typedef CALLBACK_API( OSStatus , KCCallbackProcPtr )(KCEvent keychainEvent, KCCallbackInfo *info, void *userContext);
  398. typedef STACK_UPP_TYPE(KCCallbackProcPtr)                         KCCallbackUPP;
  399. #if OPAQUE_UPP_TYPES
  400.     EXTERN_API(KCCallbackUPP)
  401.     NewKCCallbackUPP               (KCCallbackProcPtr        userRoutine);
  402.  
  403.     EXTERN_API(void)
  404.     DisposeKCCallbackUPP           (KCCallbackUPP            userUPP);
  405.  
  406.     EXTERN_API(OSStatus)
  407.     InvokeKCCallbackUPP               (KCEvent                    keychainEvent,
  408.                                     KCCallbackInfo *        info,
  409.                                     void *                    userContext,
  410.                                     KCCallbackUPP            userUPP);
  411.  
  412. #else
  413.     enum { uppKCCallbackProcInfo = 0x00000FB0 };                     /* pascal 4_bytes Func(2_bytes, 4_bytes, 4_bytes) */
  414.     #define NewKCCallbackUPP(userRoutine)                             (KCCallbackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppKCCallbackProcInfo, GetCurrentArchitecture())
  415.     #define DisposeKCCallbackUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
  416.     #define InvokeKCCallbackUPP(keychainEvent, info, userContext, userUPP)  (OSStatus)CALL_THREE_PARAMETER_UPP((userUPP), uppKCCallbackProcInfo, (keychainEvent), (info), (userContext))
  417. #endif
  418. /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  419. #define NewKCCallbackProc(userRoutine)                             NewKCCallbackUPP(userRoutine)
  420. #define CallKCCallbackProc(userRoutine, keychainEvent, info, userContext) InvokeKCCallbackUPP(keychainEvent, info, userContext, userRoutine)
  421. /* Keychain Manager callbacks */
  422. EXTERN_API( OSStatus )
  423. KCAddCallback                    (KCCallbackUPP             callbackProc,
  424.                                  KCEventMask             eventMask,
  425.                                  void *                    userContext);
  426.  
  427. EXTERN_API( OSStatus )
  428. KCRemoveCallback                (KCCallbackUPP             callbackProc);
  429.  
  430. /* Managing the Human Interface */
  431. EXTERN_API( OSStatus )
  432. KCSetInteractionAllowed            (Boolean                 state);
  433.  
  434. EXTERN_API( Boolean )
  435. KCIsInteractionAllowed            (void);
  436.  
  437. /* Storing and retrieving AppleShare passwords */
  438. EXTERN_API( OSStatus )
  439. KCAddAppleSharePassword            (AFPServerSignature *    serverSignature,
  440.                                  StringPtr                 serverAddress,
  441.                                  StringPtr                 serverName,
  442.                                  StringPtr                 volumeName,
  443.                                  StringPtr                 accountName,
  444.                                  UInt32                 passwordLength,
  445.                                  const void *            passwordData,
  446.                                  KCItemRef *            item);
  447.  
  448. EXTERN_API( OSStatus )
  449. KCFindAppleSharePassword        (AFPServerSignature *    serverSignature,
  450.                                  StringPtr                 serverAddress,
  451.                                  StringPtr                 serverName,
  452.                                  StringPtr                 volumeName,
  453.                                  StringPtr                 accountName,
  454.                                  UInt32                 maxLength,
  455.                                  void *                    passwordData,
  456.                                  UInt32 *                actualLength,
  457.                                  KCItemRef *            item);
  458.  
  459. /* Storing and retrieving Internet passwords */
  460. EXTERN_API( OSStatus )
  461. KCAddInternetPassword            (StringPtr                 serverName,
  462.                                  StringPtr                 securityDomain,
  463.                                  StringPtr                 accountName,
  464.                                  UInt16                 port,
  465.                                  OSType                 protocol,
  466.                                  OSType                 authType,
  467.                                  UInt32                 passwordLength,
  468.                                  const void *            passwordData,
  469.                                  KCItemRef *            item);
  470.  
  471. EXTERN_API( OSStatus )
  472. KCAddInternetPasswordWithPath    (StringPtr                 serverName,
  473.                                  StringPtr                 securityDomain,
  474.                                  StringPtr                 accountName,
  475.                                  StringPtr                 path,
  476.                                  UInt16                 port,
  477.                                  OSType                 protocol,
  478.                                  OSType                 authType,
  479.                                  UInt32                 passwordLength,
  480.                                  const void *            passwordData,
  481.                                  KCItemRef *            item);
  482.  
  483. EXTERN_API( OSStatus )
  484. KCFindInternetPassword            (StringPtr                 serverName,
  485.                                  StringPtr                 securityDomain,
  486.                                  StringPtr                 accountName,
  487.                                  UInt16                 port,
  488.                                  OSType                 protocol,
  489.                                  OSType                 authType,
  490.                                  UInt32                 maxLength,
  491.                                  void *                    passwordData,
  492.                                  UInt32 *                actualLength,
  493.                                  KCItemRef *            item);
  494.  
  495. EXTERN_API( OSStatus )
  496. KCFindInternetPasswordWithPath    (StringPtr                 serverName,
  497.                                  StringPtr                 securityDomain,
  498.                                  StringPtr                 accountName,
  499.                                  StringPtr                 path,
  500.                                  UInt16                 port,
  501.                                  OSType                 protocol,
  502.                                  OSType                 authType,
  503.                                  UInt32                 maxLength,
  504.                                  void *                    passwordData,
  505.                                  UInt32 *                actualLength,
  506.                                  KCItemRef *            item);
  507.  
  508. /* Storing and retrieving other types of passwords */
  509. EXTERN_API( OSStatus )
  510. KCAddGenericPassword            (StringPtr                 serviceName,
  511.                                  StringPtr                 accountName,
  512.                                  UInt32                 passwordLength,
  513.                                  const void *            passwordData,
  514.                                  KCItemRef *            item);
  515.  
  516. EXTERN_API( OSStatus )
  517. KCFindGenericPassword            (StringPtr                 serviceName,
  518.                                  StringPtr                 accountName,
  519.                                  UInt32                 maxLength,
  520.                                  void *                    passwordData,
  521.                                  UInt32 *                actualLength,
  522.                                  KCItemRef *            item);
  523.  
  524. /* Creating and editing a keychain item */
  525. EXTERN_API( OSStatus )
  526. KCNewItem                        (KCItemClass             itemClass,
  527.                                  OSType                 itemCreator,
  528.                                  UInt32                 length,
  529.                                  const void *            data,
  530.                                  KCItemRef *            item);
  531.  
  532. EXTERN_API( OSStatus )
  533. KCSetAttribute                    (KCItemRef                 item,
  534.                                  KCAttribute *            attr);
  535.  
  536. EXTERN_API( OSStatus )
  537. KCGetAttribute                    (KCItemRef                 item,
  538.                                  KCAttribute *            attr,
  539.                                  UInt32 *                actualLength);
  540.  
  541. EXTERN_API( OSStatus )
  542. KCSetData                        (KCItemRef                 item,
  543.                                  UInt32                 length,
  544.                                  const void *            data);
  545.  
  546. EXTERN_API( OSStatus )
  547. KCGetData                        (KCItemRef                 item,
  548.                                  UInt32                 maxLength,
  549.                                  void *                    data,
  550.                                  UInt32 *                actualLength);
  551.  
  552. /* Managing keychain items */
  553. EXTERN_API( OSStatus )
  554. KCAddItem                        (KCItemRef                 item);
  555.  
  556. EXTERN_API( OSStatus )
  557. KCDeleteItem                    (KCItemRef                 item);
  558.  
  559. EXTERN_API( OSStatus )
  560. KCUpdateItem                    (KCItemRef                 item);
  561.  
  562. EXTERN_API( OSStatus )
  563. KCReleaseItem                    (KCItemRef *            item);
  564.  
  565. EXTERN_API( OSStatus )
  566. KCCopyItem                        (KCItemRef                 item,
  567.                                  KCRef                     destKeychain,
  568.                                  KCItemRef *            copy);
  569.  
  570. /* Searching and enumerating keychain items */
  571. EXTERN_API( OSStatus )
  572. KCFindFirstItem                    (KCRef                     keychain,
  573.                                  const KCAttributeList * attrList,
  574.                                  KCSearchRef *            search,
  575.                                  KCItemRef *            item);
  576.  
  577. EXTERN_API( OSStatus )
  578. KCFindNextItem                    (KCSearchRef             search,
  579.                                  KCItemRef *            item);
  580.  
  581. EXTERN_API( OSStatus )
  582. KCReleaseSearch                    (KCSearchRef *            search);
  583.  
  584. /* Working with certificates */
  585. EXTERN_API( OSStatus )
  586. KCFindX509Certificates            (KCRef                     keychain,
  587.                                  CFStringRef             name,
  588.                                  CFStringRef             emailAddress,
  589.                                  KCCertSearchOptions     options,
  590.                                  CFMutableArrayRef *    certificateItems);
  591.  
  592. EXTERN_API( OSStatus )
  593. KCChooseCertificate                (CFArrayRef             items,
  594.                                  KCItemRef *            certificate,
  595.                                  CFArrayRef             policyOIDs,
  596.                                  KCVerifyStopOn         stopOn);
  597.  
  598. /* Routines that use "C" strings */
  599. EXTERN_API_C( OSStatus )
  600. kcunlock                        (KCRef                     keychain,
  601.                                  const char *            password);
  602.  
  603. EXTERN_API_C( OSStatus )
  604. kccreatekeychain                (const char *            password,
  605.                                  KCRef *                keychain);
  606.  
  607. EXTERN_API_C( OSStatus )
  608. kcgetkeychainname                (KCRef                     keychain,
  609.                                  char *                    keychainName);
  610.  
  611. EXTERN_API_C( OSStatus )
  612. kcaddapplesharepassword            (AFPServerSignature *    serverSignature,
  613.                                  const char *            serverAddress,
  614.                                  const char *            serverName,
  615.                                  const char *            volumeName,
  616.                                  const char *            accountName,
  617.                                  UInt32                 passwordLength,
  618.                                  const void *            passwordData,
  619.                                  KCItemRef *            item);
  620.  
  621. EXTERN_API_C( OSStatus )
  622. kcfindapplesharepassword        (AFPServerSignature *    serverSignature,
  623.                                  const char *            serverAddress,
  624.                                  const char *            serverName,
  625.                                  const char *            volumeName,
  626.                                  const char *            accountName,
  627.                                  UInt32                 maxLength,
  628.                                  void *                    passwordData,
  629.                                  UInt32 *                actualLength,
  630.                                  KCItemRef *            item);
  631.  
  632. EXTERN_API_C( OSStatus )
  633. kcaddinternetpassword            (const char *            serverName,
  634.                                  const char *            securityDomain,
  635.                                  const char *            accountName,
  636.                                  UInt16                 port,
  637.                                  OSType                 protocol,
  638.                                  OSType                 authType,
  639.                                  UInt32                 passwordLength,
  640.                                  const void *            passwordData,
  641.                                  KCItemRef *            item);
  642.  
  643. EXTERN_API_C( OSStatus )
  644. kcaddinternetpasswordwithpath    (const char *            serverName,
  645.                                  const char *            securityDomain,
  646.                                  const char *            accountName,
  647.                                  const char *            path,
  648.                                  UInt16                 port,
  649.                                  OSType                 protocol,
  650.                                  OSType                 authType,
  651.                                  UInt32                 passwordLength,
  652.                                  const void *            passwordData,
  653.                                  KCItemRef *            item);
  654.  
  655. EXTERN_API_C( OSStatus )
  656. kcfindinternetpassword            (const char *            serverName,
  657.                                  const char *            securityDomain,
  658.                                  const char *            accountName,
  659.                                  UInt16                 port,
  660.                                  OSType                 protocol,
  661.                                  OSType                 authType,
  662.                                  UInt32                 maxLength,
  663.                                  void *                    passwordData,
  664.                                  UInt32 *                actualLength,
  665.                                  KCItemRef *            item);
  666.  
  667. EXTERN_API_C( OSStatus )
  668. kcfindinternetpasswordwithpath    (const char *            serverName,
  669.                                  const char *            securityDomain,
  670.                                  const char *            accountName,
  671.                                  const char *            path,
  672.                                  UInt16                 port,
  673.                                  OSType                 protocol,
  674.                                  OSType                 authType,
  675.                                  UInt32                 maxLength,
  676.                                  void *                    passwordData,
  677.                                  UInt32 *                actualLength,
  678.                                  KCItemRef *            item);
  679.  
  680. EXTERN_API_C( OSStatus )
  681. kcaddgenericpassword            (const char *            serviceName,
  682.                                  const char *            accountName,
  683.                                  UInt32                 passwordLength,
  684.                                  const void *            passwordData,
  685.                                  KCItemRef *            item);
  686.  
  687. EXTERN_API_C( OSStatus )
  688. kcfindgenericpassword            (const char *            serviceName,
  689.                                  const char *            accountName,
  690.                                  UInt32                 maxLength,
  691.                                  void *                    passwordData,
  692.                                  UInt32 *                actualLength,
  693.                                  KCItemRef *            item);
  694.  
  695. /* Keychain Manager error codes */
  696. enum {
  697.     errKCNotAvailable            = -25291,
  698.     errKCReadOnly                = -25292,
  699.     errKCAuthFailed                = -25293,
  700.     errKCNoSuchKeychain            = -25294,
  701.     errKCInvalidKeychain        = -25295,
  702.     errKCDuplicateKeychain        = -25296,
  703.     errKCDuplicateCallback        = -25297,
  704.     errKCInvalidCallback        = -25298,
  705.     errKCDuplicateItem            = -25299,
  706.     errKCItemNotFound            = -25300,
  707.     errKCBufferTooSmall            = -25301,
  708.     errKCDataTooLarge            = -25302,
  709.     errKCNoSuchAttr                = -25303,
  710.     errKCInvalidItemRef            = -25304,
  711.     errKCInvalidSearchRef        = -25305,
  712.     errKCNoSuchClass            = -25306,
  713.     errKCNoDefaultKeychain        = -25307,
  714.     errKCInteractionNotAllowed    = -25308,
  715.     errKCReadOnlyAttr            = -25309,
  716.     errKCWrongKCVersion            = -25310,
  717.     errKCKeySizeNotAllowed        = -25311,
  718.     errKCNoStorageModule        = -25312,
  719.     errKCNoCertificateModule    = -25313,
  720.     errKCNoPolicyModule            = -25314,
  721.     errKCInteractionRequired    = -25315,
  722.     errKCDataNotAvailable        = -25316,
  723.     errKCDataNotModifiable        = -25317,
  724.     errKCCreateChainFailed        = -25318
  725. };
  726.  
  727.  
  728.  
  729. #if PRAGMA_STRUCT_ALIGN
  730.     #pragma options align=reset
  731. #elif PRAGMA_STRUCT_PACKPUSH
  732.     #pragma pack(pop)
  733. #elif PRAGMA_STRUCT_PACK
  734.     #pragma pack()
  735. #endif
  736.  
  737. #ifdef PRAGMA_IMPORT_OFF
  738. #pragma import off
  739. #elif PRAGMA_IMPORT
  740. #pragma import reset
  741. #endif
  742.  
  743. #ifdef __cplusplus
  744. }
  745. #endif
  746.  
  747. #endif /* __KEYCHAIN__ */
  748.  
  749.